﻿using System;

namespace ConsoleApp4
{
    public enum Robotinfo
    {
        香辣牛蛙,
        黑椒牛排

    }
    abstract class Robot
    {
        private string name;
        private Robotinfo type;
        public string Name
        {
            get { return this.name; }
            set { this.name = value; }
        }
        public Robotinfo Type
        {
            get { return this.type; }
            set { this.type = value; }
        }
        public Robot() { }

        public Robot(string name, Robotinfo type)
        {
            this.name = name;
            this.type = type;
        }
        public abstract void Working();

        class CookRobot : Robot
        {
            private string item;
            private string name;
            private string v;

            public CookRobot(string name, Robotinfo type, string v) : base(name, type)
            {
                this.v = v;
            }

            public string Item { get => item; set => item = value; }

            public override void Working()
            {
                Console.WriteLine("欢迎光临维也纳国际饭店，请问你要点什么菜？npc:{0},正在炒{1}，{2},请您稍等一会菜马上上传", base .Name, this.Type, this.item);
            }
            class DeliveryRobot : Robot
            {
                private string hours;
                private string name;
                public string Hours { get => hours; set => hours = value; }
                public override void Working()
                {
                    Console.WriteLine("正在帮你传菜！\tNPC：{0}，正在帮你传{1},还需要{2}小时", base.Name, this.type, this.hours);

                }
                public DeliveryRobot(string name, Robotinfo type, string hours) : base(name, type)
                {
                    this.hours = hours;
                }
            }
        }
        class Program
        {
            //编写一个程序，以实现机器人的层次结构，此层次结构将至少包含抽象类机器人类Robot、炒菜机器人类CookRobot、传菜机器人类DeliveryRobot。
            //Robot类应包含机器人姓名name字段、机器人工作的方法Working()，该方法应该在子类中被实现，机器人工作的方式很多，
            //所以Working()方法应该被定义为抽象方法。

            //可以在CookRobot中添加一个代表菜的类型的字段，用枚举类型；在DeliveryRobot中添加一个代表连续工作时长的字段hours。
            //CookRobot和DeliveryRobot应实现具体的Working()方法。

            //在主类中定义一个方法，形参数据类型是string，返回值数据类型是Robot，方法中实现如果传入的字符串是“炒菜”，
            //那就返回CookRobot的实例（当然是要用Robot的引用指向的），如果传入的字符串是“传菜”，那就返回DeliveryRobot的实例。

            //Main方法中：用户输入所选择的机器人的功能，根据用户的输入Robot执行对应的功能。
            public static Robot quancai(string a)
            {
                Robot b;
                switch (a)
                {
                    case "炒菜":
                        b = new CookRobot("炒菜机器人", Robotinfo.黑椒牛排, "炒菜中...");
                        b.Working();
                        break;
                    case "传菜":
                        b = new DeliveryRobot("传菜机器人", Robotinfo.香辣牛蛙, "1");
                        b.Working();
                        break;
                    default:
                        Console.WriteLine("没有该选菜选项！请重新输入");
                        b = new CookRobot("炒菜机器人", Robotinfo.黑椒牛排, "炒菜中...");
                        b.Working();
                        break;
                }
                return b;
            }
            static void Main(string[] args)
            {
                Console.WriteLine("请选择：1.炒菜2.传菜");
                string a = Console.ReadLine();
                quancai(a);
            }
        }
    }

    internal class DeliveryRobot : Robot
    {
        private string v1;
        private Robotinfo 香辣牛蛙;
        private string v2;

        public DeliveryRobot(string v1, Robotinfo 香辣牛蛙, string v2)
        {
            this.v1 = v1;
            this.香辣牛蛙 = 香辣牛蛙;
            this.v2 = v2;
        }

        public override void Working()
        {
            throw new NotImplementedException();
        }
    } 
}